/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package educar.models;

import educar.db.JPA;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 *
 * @author gaston
 */
public class Facultad {
   
    //Atributo usado para cear una instancia que contenga un query
    private static JPA jpa = new JPA();
    
    //Cadena usada para almacenar el codigo de una facultad
    private String codigo;
    
    //Cadena usada para almacenar nombre de una facultad
    private String nombreFacultad;
    
    
    /**
     * <hr>
     * Facultad(): Contructor con parametros de la clase Facultad.
     * <hr>
     * @param dnid
     * @param nombreFacultad
     */
    public Facultad(String codigo, String nombreFacu) {
        this.codigo= codigo;
        this.nombreFacultad = nombreFacu;
    }//Fin del metodo Facultad().
     
    
    
    
    /**
     * <hr>
     * Facultad(): Constructor que recibe como parametro un vector que contiene
     * los datos academicos de la facultad.
     * <hr>
     * @param arreglo 
     */
    public Facultad(String[] arreglo){
        this.setCodigo(arreglo[0]);
        this.setNombreFacultad(arreglo[1]);
    }//Fin del metodo Facultad(String[])
    
    
    /**
     * <hr>
     * existe(): Sirve para poder verificar si existe o no una facultad
     * <hr>
     * @param codigo
     * @return boolean
     */
    public static boolean exist(String codigo){
        try{
            Facultad.getFacultadPorCodigo(codigo);
            return true;
        } 
        catch (FacultadNotFound ex){
            return false; 
        }
    }//Fin del metodo exist()
    

    /**
     * 
     * @return dni
     */
    public String getCodigo() {
	return codigo;
    }
        
    
    /**
     * 
     * @param dni 
     */
    public void setCodigo(String codigo) {
	this.codigo = codigo;
    }

        
    /**
     * 
     * @return nombreFacultad
     */
    public String getNombreFacultad() {
	return nombreFacultad;
    }

        
    /**
     * 
     * @param nombreFacultad 
     */
    public void setNombreFacultad(String nombreFacu) {
	this.nombreFacultad = nombreFacu;
    }
    
    
    /**
     * <hr>
     * save():Intenta obtener una facultad de la base de datos si lo logra retorna false,
     * por cualquier problema que ocurra al intentar obtenerlo tambien retorna false, 
     * pero si logra ingresar la facultad retorna true.
     * <hr>
     * @return boolean
     */
    public boolean save() {
        //Se intenta obtener una facultad
        try {
            Facultad.getFacultadPorCodigo(codigo);
            return false;
        } //No se pudo obtener una facultad entonces se intenta ingresar
        catch (FacultadNotFound e1) { 
            String[] columns = { "codFacultad", "nombre" };
            PreparedStatement stm = jpa.newRecord("educar_dev.facultad", columns);
            
            try {//Intenta setear estos datos
                stm.setString(1, codigo);
                stm.setString(2, nombreFacultad);
            } catch (SQLException e) {//Ocurrio un error al intentar ingresar la facultad
                e.printStackTrace();
                return false;
            }
            jpa.create(stm); //Inserta la facultad
            return true;
	}
    }//Fin del metodo save()
    
      
    /**
     * <hr> 
     * destroy(): Usado para eliminar una facultad de la base de datos
     * <hr>
     */
    public void destruir() {
        jpa.destroy("facultad", "codFacultad", this.getCodigo());
    }
    

    /**
     * <hr>
     * destruirFacultadPorDni(): Metodo estatico usado para eliminar un elemento de la base de datos
     * <hr>
     * @param codigo
     */
    public static void destruirFacultadPorDni(String codigo){
        jpa.destroy("facultad", "codFacultad", codigo);
    }

    
    /**
     * <hr>
     * setFacultadPorDni(): Esta clase modifica a un facultad usando su codigo
     * <hr>
     * @param codigo
     */
     public boolean setFacultadPorCodigo(String codigo){
        jpa.update("facultad", "codFacultad",this.codigo , "codFacultad", codigo);
        jpa.update("facultad", "nombre", nombreFacultad, "codFacultad", codigo);
        return true;
    }//Fin de la clase setFacultadPorDni(String dniD)
    
    
    /**
     * <hr>
     * getFacultadPordni(): Dado el codigo de una facultad, consulto la base de datos
     * usando este codigo para obtener todos los datos de la misma, en el caso que este 
     * no se encuentre lanza una excepcion FacultadNotFound.
     * <hr>
     * @param codigo
     * @return facultad
     * @throws FacultadNotFound 
     */
    public static Facultad getFacultadPorCodigo(String codigo) throws FacultadNotFound {
        //Consulto en la base de datos la tabla facultad, usando el codigo como clave
        ResultSet resultadoConsulta = null;
        resultadoConsulta = jpa.getByField("facultad", "codFacultad",codigo ); 
	
        Facultad facultad = null;
	try {
            if (resultadoConsulta.next()) {
                facultad = new educar.models.Facultad(resultadoConsulta.getString(1), resultadoConsulta.getString(2));
            } else{
                throw new FacultadNotFound();
            }
	} catch (SQLException e) {
	e.printStackTrace();
        }
        return facultad;
    }//Fin del metodo getFacultadPorCodigo().

    
}//Fin de la clase Facultad.